// 数据模型

// Schema主要是用来定义数据库表中的字段类型

// 如果表中的字段是一个String字符型，我们如果传入一个number
// 类型，显然不符合数据库得字段规范，这就是Schema需要做的事情


// 几种常见的字段
// String      字符串
// Number      数字    
// Date        日期
// Buffer      二进制
// Boolean     布尔值
// Mixed       混合类型
// ObjectId    对象ID    
// Array       数组

// 引入mongoose模块
const mongoose = require('mongoose') ;

// 引入mongoose中schema模块
const Schema = mongoose.Schema ; 

// 定义user表的字段规范
const user_schema = new Schema({
    username:String,    //用户名
    password:String,    //密码
    phone:String,       //手机号
    time:Date,          //注册时间
    avatar:String,      //头像
    role:Number         //权限等级
});

const role_schema = new Schema({
    // _id:Number,         //权限id
    level:Number,       //权限值
    namestar:String,    //权限名称
    productor:String,   //注册商户
    color:String        //权限属性
});

const type_schema = new Schema({
    // _id:Number,             //id
    typename:String,      //类型值
    typevalue:Number,    //类型名称
    color:String        //类型属性
});

const cate_schema = new Schema({
    // _id:Number,         //id
    catename:String,       //类别值
    catevalue:Number,    //类别名称
    color:String        //类别属性
});

const tran_schema = new Schema({
    // _id:Number,         //id
    transImg:String,    //图片地址
    transLink:String,   //图片链接
    typeid:Number,      //轮播图所属类别
});

const good_schema = new Schema({
    name:String,    //商品名称
    price:Number,   //商品价格
    count:Number,   //商品库存
    sales:Number,   //商品销量
    percent:Number, //商品折扣
    cateid:Number,  //所属类别id
    typeid:Number,  //所属类型id
    producid:String,    //所属商户id
    imgs:Array,     //商品图片
    time:Date,      //商品上架时间
    is_delete:Boolean,//商品是否下架
    is_sec:Boolean,//商品是否参与当日秒杀
});

const msg_schema = new Schema({
    name:String,
    content:String,
    time:Date
});



// model
// 将schema构造的一些规范与数据库得表之间关联
// 然后对数据库进行一些操作

// 这里需要注意的是，我们表的名称问题

// 如果表名称的最后一个字符是字母 会变成复数  user = users   city = cities  yyoh => yyohes 
// 如果表名称的最后一个字符是数字，则不变  user1  = user1   list1 = list1 

exports.user_model =  mongoose.model('users',user_schema);
exports.role_model = mongoose.model('roles',role_schema);
exports.type_model = mongoose.model('types',type_schema);
exports.cate_model = mongoose.model('cates',cate_schema);
exports.tran_model = mongoose.model('trans',tran_schema);
exports.good_model = mongoose.model('goods',good_schema);
exports.msg_model = mongoose.model('msgs',msg_schema);























const shopper_schema = new Schema({
    username:String,    //用户名
    password:String,    //密码
    phone:String,       //手机号
    time:Date,          //注册时间
    avatar:String,      //头像
    role:Number         //权限等级
});

exports.shopper_model = mongoose.model('shoppers',shopper_schema);

const level_schema = new Schema({
    value:Number,       //权限值
    label:String,    //权限名称
    color:String        //权限属性
});

exports.level_model = mongoose.model('levels',level_schema);

const product_schema = new Schema({
    name:String,        //商品名称
    details:String,     //商品描述
    price:Number,       //商品价格
    count:Number,       //商品库存
    sales:Number,       //商品销量
    percent:Number,     //商品折扣
    cateid:String,      //所属类别id
    ptypevalue:String,  //所属大类型id
    subTypevalue:String,//所属子类id
    lowTypevalue:String,//所属次级子类id
    producid:String,    //所属商户id
    proInfo:Object,     //用户信息
    imgs:Array,         //商品图片
    time:Number,        //商品上架时间
    is_delete:Boolean,  //商品是否下架
    delTime:Number,     //商品下架时间
    is_sec:Boolean,     //商品是否参与当日秒杀
    secTime:Number      //秒杀时间     时间搓     
});

exports.product_model = mongoose.model('products',product_schema);

const pcate_schema = new Schema({
    catename:String,       //类别值
    catevalue:Number,    //类别名称
    color:String        //类别属性
});

exports.pcate_model = mongoose.model('pcates',pcate_schema);

const ptype_schema = new Schema({
    ptypename:String,       //类别名称
    ptypevalue:String,      //所属大类别值 _id
    subTypename:String,     //子类名称
    subTypevalue:String,    //所属子类类别值   子类_id
    lowTypename:String,     //次级类别名
    color:String            //类别属性
});

exports.ptype_model = mongoose.model('ptypes',ptype_schema);

const announce_schema = new Schema({
    annoTitle:String,       //通知标题
    annoContent:String,     //通知内容
    annoTypeid:Number,      //通知类型
    annoPic:String,         //类别名称     //类别属性
    time:Number,            //通知发布时间   时间戳
    sendid:String,          //发送者id
    sendname:String         //发送者用户名
});

exports.announce_model = mongoose.model('announces',announce_schema);

const annoType_schema = new Schema({
    annoName:String,        //通知类型名称
    annoValue:Number,       //通知类型值
    color:String            //通知属性
});

exports.annoType_model = mongoose.model('annoTypes',annoType_schema);

const message_schema = new Schema({
    sendid:String,          //发起者id
    senderInfo:Object,      //发起者
    receiveid:String,       //接受者id
    receiver:String,        //接收者
    content:String,         //留言内容
    time:Number,            //留言时间
    rtime:Number,           //回复时间
    is_read:Boolean,        //是否已读
    is_reply:Boolean        //是否已回复
});

exports.message_model = mongoose.model('messages',message_schema);

// const grade_schema = new Schema({
//     uid:String,             //添加信息人的id
//     uInfo:Object,           //添加信息人的所有信息
//     stuName:String,         //学员姓名
//     stuGrade:Number,        //学员分数
//     stuLevel:String,        //学员评级                  A    B    C    D    E  
//     stuGlory:Number,        //学员荣誉类型     1   优秀学员    2    三好学生      3    五好学生   ..... 自己在前端设计
//     remark:String,          //教师评语
//     time:Date,              //评价时间
// });
// exports.grade_model = mongoose.model('grades',grade_schema);